#ifndef VM_H
#define VM_H
#include <dtype.h>
//虚拟机
#include "reg.h"
#include "stack.h"


//调用帧
STRUCT_P(CHRT_CALL_FRAME)
{
    CHRT_REG Reg;//全局寄存器指针
    byte *PrevCodeAddress;//调用前的代码段地址
    CHRT_STACK PrevStack;//上一个函数的栈帧
    CHRT_STACK Stack;//当前栈帧
};

//虚拟实例主体
STRUCT_P(CHRT_LIBRARY)
{
    int32 Id;
};

//虚拟实例主体
STRUCT_P(CHRT_PROGRAM)
{
    CHRT_CALL_FRAME MainCallFrame;//主函数栈帧
    CHRT_REG Reg;//寄存器表
};


//新建程序环境
CHRT_PROGRAM Chvm_New_Program();

//新建调用帧
CHRT_CALL_FRAME Chvm_New_CallFrame(CHRT_STACK prevs, CHRT_REG reg, int32 size);

#endif
